const db = require('../db/index'); // 导入数据库模块
const bcryptjs = require('bcryptjs'); // 导入加密模块 
const jwt = require('jsonwebtoken');
const config = require('../config');
// 注册功能处理函数
exports.reg = (req, res) => { // 挂载路由
    const userInfo = req.body; // 得到用户填写的信息
    // 若用户名或密码为空,则返回提示信息
    // if (!userInfo.username || !userInfo.password) return res.cs('用户名密码不能为空')
    const selSql = 'select * from users where username = ?'; // 定义SQL查询语句
    db.query(selSql, userInfo.username, (err, data) => { // 查询数据库中是否有重复的用户名
        if (err) return res.cs(err); // 若有错误信息,则返回
        if (data.length !== 0) return res.cs('该用户名已被占用'); // 若data为数组,则表示用户名重复
        userInfo.password = bcryptjs.hashSync(userInfo.password, 10); // 将用户密码加密,并重新赋值
        const addSql = 'insert into users set ?'; // 定义SQL添加语句
        db.query(addSql, userInfo, (err, data) => { // 将不重复的用户名信息添加到数据库中
            if (err) return res.cs(err); // 若SQl语句写错,返回提示信息
            // 如果影响的行数不为1,返回提示信息
            if (data.affectedRows !== 1) return res.cs('注册失败,请稍后再试');
            // 注册成功
            res.cs('用户创建成功', 0);
        })
    })
}
exports.login = (req, res) => {
    const userinfo = req.body; // 将用户信息收集起来
    const selSql = 'select * from users where username = ?'; // 定义查询用户名SQL语句
    db.query(selSql, userinfo.username, (err, data) => { // 执行SQL语句,查询用户名
        if (err) return res.cs(err);
        if (data.length === 0) return res.cs('登陆失败');
        // bcryptjs.compareSync(用户提交密码, 数据库内密码),比较密码是否一致 返回布尔值,相同为true,不同为false. 
        const flag = bcryptjs.compareSync(userinfo.password, data[0].password);
        if (!flag) return res.cs('登陆失败');
        // 验证成功之后
        const user = { ...data[0], password: '', user_pic: '' }; // es6写法,将对象展开,password和头像赋值为空
        const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '10h' }); // 生成一个token字符串
        // 向客户端响应携带token的数据
        res.send({
            status: 0,
            message: '登陆成功',
            token: 'Bearer ' + tokenStr
        });
    })
}